<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+


/**
 * @file category_page.test.php
 * @brief файл содержит код для тестирования класса CategoryPage \n
 *        исходный код находится в разделе примеры
 * @include category_page.test.php
 */

/*! @addtogroup TestWebFormsQA Tестирование проекта WebFormsQA
 *  Группа включает классы для тестирования исходного кода
 *  @{
 */

/**
 * @class CategoryPageTest
 * @brief Класс для проверки методов страницы создания и изменения категорий CategoryPage \n
 *        Исходный код [ @ref category_page.test.php ]
 */
class CategoryPageTest extends PHPUnit_TestCase {

    /**
     * Метод проверяет состояния страницы - "ДОБАВИТЬ КАТЕГОРИЮ"
     */
    function testUpdate()
    {
        require_once('smarty/smarty.class.php');
        $smarty         = new Smarty;
        $attr           = array(
            'first'          => 'string',       // имя пользователя
            'second'         => 'string'        // пароль пользователя
        );
        // путь к текущему активному шаблону
        $path_template  = "./templates/first/";
        $main_page= new MainPage($smarty, $attr, $path_template, "");

        DataAddTest::DeleteTestDataInDatabase();
        DataAddTest::AddTestDataInDatabase();
        
        $base   = &$GLOBALS["base"];

        // тестовый пользователь с административными правами
        $login 	= "testUser1";
        $pass	= "testUser1";
        $email	= "test@mail.ru";
        $admin	= true;
        $data 	= compact("login", "pass", "email", "admin");
        $id		= "";
	    $this->assertFalse( $base->addUser($data, $id) );
	    $this->assertEquals(1, $id);
	    
	    /*
     	 *  Состояния страницы:
     	 * - 1 - Авторизация не прошла (стр. EntrancePage),  или пользователь не зарегистрирован или у него нет административного доступа
         * - 2 - Успешная авторизация пользователя.
         * - 3 - Пользователь добавляет новую категорию в корневую. 
         * - 4 - Пользователь добавляет новую категорию в текущую выбранную. 
         * - 5 - Предупреждающее сообщение - данная категория уже есть.
	     * - 6 - вывод сообщения - вы должны указать название новой категории
         * - 7 - Вывод сообщения - категория успешно добавлена.
         * - 8 - Нажата ссылка удалить категорию, но категория не выбрана 
         * - 9 - Нажата ссылка удалить категорию, категория выбрана, вывод предупреждения
         * - 10- Категория успешно удалена
         * - 11- Категория удалена, но содержит вопросы, которые перенесли в корневую
         * - 12- Категория содержит под категории, вначале удалите их
	     */	    
	    
        $smarty->assign("state", 0);
        
        // переключение на страницу
        $_POST['category_page'] = '';

        //    1)  Авторизация не прошла (стр. EntrancePage),  или пользователь не зарегистрирован или у него нет административного доступа  
        AuthCommon::unsetAuthSessionInfo();
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(1, $state);


     	$_SESSION["id_user"]  				= $id;
        $_SESSION["authorization_admin"]  	= true;
        unset( $_GET['categoryID'] );
        
        // - 2 - Успешная авторизация пользователя.
        AuthCommon::addAuthSessionInfo($id, $login, $admin, $email);
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(2, $state);
        
        $_GET['ref_add'] = '';
	    // - 3 - Пользователь добавляет новую категорию в корневую.
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(3, $state);
        
        $_GET['categoryID'] = '1'; 
        // - 4 - Пользователь добавляет новую категорию в текущую выбранную. 
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(4, $state);
        
        // у пользователя нет административных прав
        AuthCommon::addAuthSessionInfo($id, $login, false, $email);
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(1, $state);


        unset($_GET['categoryID']);
        unset( $_SESSION['categoryID'] );
        // 	  3)  Успешная авторизация пользователя (административные права подтверждены)
        AuthCommon::addAuthSessionInfo($id, $login, $admin, $email);
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(3, $state);
        

        // Нажата ссылка добавить категорию.
        $_GET['ref_add']        = '';

        //    3)  Пользователь добавляет новую категорию в корневую.
        $_GET['categoryID']     = 0;
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(3, $state);

        //    4)  Пользователь добавляет новую категорию в текущую выбранную.
        $_GET['categoryID']     = 1;
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(4, $state);

       
        // Введена новая категория и нажата кнопка "ОК".
        $_GET['category']     = 'категория1';
        $_GET['but_category'] = '';

        //    5)  Предупреждающее сообщение - данная категория уже есть.
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(5, $state);
         
        //    7)  Вывод сообщения - категория успешно добавлена.
        $_GET['category']     = 'категория_new';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(7, $state);
        
        AuthCommon::unsetAuthSessionInfo();
        // обнуление управляющих переменных
        unset($_GET['category']);
        unset($_GET['categoryID']);
        unset($_GET['but_category']);
        unset($_GET['ref_add']);
		unset( $_SESSION['categoryID'] );


    } // testUpdate


} // EditPageTest

/*! @} */

?>
